Dataset Queries (Reference) enable SQL-based data operations including SELECT, INSERT, UPDATE, DELETE statements and stored procedure execution. Dataset Queries provide:
Queries connect to configured DBs and can embed tag values dynamically in SQL statements.
Property | Description | Required |
---|---|---|
Name | Unique query identifier (no spaces) | Yes |
DB | Target database connection | Yes |
SqlStatement | SQL query or stored procedure | Yes |
Mapping | Tag-to-column assignments | No |
MappingDateTime | Time interpretation (UTC/Local) | No |
Description | Documentation text | No |
sql
SELECT * FROM Production WHERE Status = 1
UPDATE Inventory SET Count = 100 WHERE ID = 5
DELETE FROM TempData WHERE Age > 30
Embed tag values using double curly braces:
sql
SELECT * FROM Production
WHERE BatchID = {{Tag.Production/Batch_ID}}
AND Temperature > {{Tag.TankFarm/Tank1/Temp}}
AND Status = {{Tag.Equipment/MotorRunning}}
Default format: yyyy-MM-dd HH:mm:ss
(ISO 8601)
sql
SELECT * FROM History
WHERE Timestamp > '{{Tag.StartDate}}'
Configure result set mapping to tags:
Column | Tag | Direction |
---|---|---|
ProductID | Tag.Production_ID | Output |
Count | Tag.Production_Count | Output |
BatchID | Tag.Batch_ID | Input/Output |
sql
-- Simple execution
EXEC GetProductionData @Date = '{{Tag.QueryDate}}'
-- With output parameters
EXEC TestOutput
@return_Value = {{Tag.ReturnValue}} RETURN_VALUE,
@vcrPrefix = @null@,
@intNextNumber = {{Tag.NextNumber}} OUTPUT,
@vcrFullLicense = {{Tag.NextLicense}} OUTPUT
Use @null@
syntax for null values:
sql
EXEC UpdateBatch @ID = {{Tag.BatchID}}, @Notes = @null@
csharp
// Trigger query execution
@Dataset.Query.MyQuery.SqlStatement = "SELECT * FROM Data";
@Dataset.Query.MyQuery.Select = true;
// Check status
if (@Dataset.Query.MyQuery.ExecutionStatus == "OK")
{
// Process results
}
csharp
// Execute and wait for results
DataTable result = @Dataset.Query.MyQuery.SelectCommand();
// With status check
string status;
@Dataset.Query.MyQuery.ExecuteCommandWithStatus(out status);
csharp
public void ExecuteQuery()
{
// Build dynamic query
string sql = string.Format(
"SELECT * FROM Production WHERE Line = '{0}'",
@Tag.ProductionLine
);
@Dataset.Query.ProductionQuery.SqlStatement = sql;
// Execute with status
string status;
@Dataset.Query.ProductionQuery.ExecuteCommandWithStatus(out status);
if (status == "OK")
{
@Tag.QueryResult = "Success";
}
}
Built-in SQL editor features:
Access via:
Graphical query construction:
csharp
// Test mode execution
@Dataset.Query.TestQuery.SqlStatement =
"SELECT COUNT(*) FROM Production";
@Dataset.Query.TestQuery.Select = true;
sql
-- Use TOP/LIMIT
SELECT TOP 100 * FROM LargeTable
-- Use indexes
CREATE INDEX idx_timestamp ON Data(Timestamp)
-- Parameterize queries
SELECT * FROM Table WHERE ID = {{Tag.ID}}
sql
-- Use transactions
BEGIN TRANSACTION
UPDATE Table1...
UPDATE Table2...
COMMIT
Query not executing:
Slow performance:
Mapping issues: