根据定义(至少从我所见过的),sargable意味着查询能够使查询引擎优化查询使用的执行计划.我已经尝试过查找答案,但似乎没有太多关于主题的内容.所以问题是,什么做或不做一个SQL查询sargable?任何文件将不胜感激.
供参考:SARGable
我想从C#程序执行此存储过程.
我在SqlServer查询窗口中编写了以下存储过程并将其保存为stored1:
use master
go
create procedure dbo.test as
DECLARE @command as varchar(1000), @i int
SET @i = 0
WHILE @i < 5
BEGIN
Print 'I VALUE ' +CONVERT(varchar(20),@i)
EXEC(@command)
SET @i = @i + 1
END
Run Code Online (Sandbox Code Playgroud)
编辑:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace AutomationApp
{
class Program
{
public void RunStoredProc()
{
SqlConnection conn = null;
SqlDataReader rdr = null;
Console.WriteLine("\nTop 10 Most Expensive Products:\n");
try
{
conn = new SqlConnection("Server=(local);DataBase=master;Integrated Security=SSPI");
conn.Open();
SqlCommand …Run Code Online (Sandbox Code Playgroud) 我有一个表收集从我们网站提交的表单,但由于某种原因,当他们创建表时,他们没有在表中添加时间戳.我希望它输入记录输入的确切日期和时间.
我知道它在某处,但我似乎无法找到如何设置默认值(如在Access中,你使用getNow()或Now())但我不知道在哪里放它.
我正在搜索一个SQL脚本,可用于确定给定数据库的任何表中是否有任何数据(即行计数).
我们的想法是在存在任何行(在任何数据库中)的情况下重新实现数据库.
所说的数据库是Microsoft SQL SERVER.
有人可以建议一个示例脚本吗?
我从来没有为SQL Server"手动编码"对象创建代码,并且外键修改在SQL Server和Postgres之间看似不同.这是我的sql到目前为止:
drop table exams;
drop table question_bank;
drop table anwser_bank;
create table exams
(
exam_id uniqueidentifier primary key,
exam_name varchar(50),
);
create table question_bank
(
question_id uniqueidentifier primary key,
question_exam_id uniqueidentifier not null,
question_text varchar(1024) not null,
question_point_value decimal,
constraint question_exam_id foreign key references exams(exam_id)
);
create table anwser_bank
(
anwser_id uniqueidentifier primary key,
anwser_question_id uniqueidentifier,
anwser_text varchar(1024),
anwser_is_correct bit
);
Run Code Online (Sandbox Code Playgroud)
当我运行查询时,我收到此错误:
消息8139,级别16,状态0,行9外键中的引用列数与引用列的数量不同,表'question_bank'.
你能发现错误吗?
CREATE TABLE [dbo].[user](
[userID] [int] IDENTITY(1,1) NOT NULL,
[fcode] [int] NULL,
[scode] [int] NULL,
[dcode] [int] NULL,
[name] [nvarchar](50) NULL,
[address] [nvarchar](50) NULL,
CONSTRAINT [PK_user_1] PRIMARY KEY CLUSTERED
(
[userID] ASC
)
) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
如何fcode, scode, dcode使用t-sql和/或management studio?为列添加唯一约束?fcode, scode, dcode必须是独一无二的.
在MS SQL-Server中,我可以这样做:
SELECT ISNULL(Field,'Empty') from Table
但是在PostgreSQL中我遇到了语法错误.我如何模拟ISNULL()功能?
我需要使用表名和表的模式列出SQL Server数据库中的所有触发器.
我几乎在这里:
SELECT trigger_name = name, trigger_owner = USER_NAME(uid),table_schema = , table_name = OBJECT_NAME(parent_obj),
isupdate = OBJECTPROPERTY( id, 'ExecIsUpdateTrigger'), isdelete = OBJECTPROPERTY( id, 'ExecIsDeleteTrigger'),
isinsert = OBJECTPROPERTY( id, 'ExecIsInsertTrigger'), isafter = OBJECTPROPERTY( id, 'ExecIsAfterTrigger'),
isinsteadof = OBJECTPROPERTY( id, 'ExecIsInsteadOfTrigger'),
[disabled] = OBJECTPROPERTY(id, 'ExecIsTriggerDisabled')
FROM sysobjects INNER JOIN sysusers ON sysobjects.uid = sysusers.uid
WHERE type = 'TR'
Run Code Online (Sandbox Code Playgroud)
我只需要获取表的模式.
我在我的一个Sql(2008)存储过程中有以下代码执行完全正常:
CREATE PROCEDURE [dbo].[Item_AddItem]
@CustomerId uniqueidentifier,
@Description nvarchar(100),
@Type int,
@Username nvarchar(100),
AS
BEGIN
DECLARE @TopRelatedItemId uniqueidentifier;
SET @TopRelatedItemId =
(
SELECT top(1) RelatedItemId
FROM RelatedItems
WHERE CustomerId = @CustomerId
)
DECLARE @TempItem TABLE
(
ItemId uniqueidentifier,
CustomerId uniqueidentifier,
Description nvarchar(100),
Type int,
Username nvarchar(100),
TimeStamp datetime
);
INSERT INTO Item
OUTPUT INSERTED.* INTO @TempItem
SELECT NEWID(), @CustomerId, @Description, @Type, @Username, GETDATE()
SELECT
ItemId,
CustomerId,
@TopRelatedItemId,
Description,
Type,
Username,
TimeStamp
FROM
@TempItem
END
GO
Run Code Online (Sandbox Code Playgroud)
所以你们的问题是有可能做一些事情:
DECLARE @TempCustomer TABLE
(
CustomerId …Run Code Online (Sandbox Code Playgroud) sql-server ×10
sql ×4
t-sql ×3
c# ×1
database ×1
datetime ×1
null ×1
performance ×1
postgresql ×1
rowcount ×1
ssms ×1
triggers ×1